﻿#ifndef CONVERSIONUTIL_H
#define CONVERSIONUTIL_H

/*
 * 当前工具类实现了QT中各个基本数据类型和QByteArray之间的转换
 * 使用该工具类时,需要时刻注意每种数据类型和变量所占据的字节长度
 */

#include <QObject>
#include <QByteArray>

class ConversionUtil : public QObject
{
    Q_OBJECT
public:
    static quint8 ByteArrayToU1(QByteArray array);
    static quint16 ByteArrayToU2(QByteArray array);
    static quint32 ByteArrayToU4(QByteArray array);
    static quint64 ByteArrayToU8(QByteArray array);
    static qint8 ByteArrayToI1(QByteArray array);
    static qint16 ByteArrayToI2(QByteArray array);
    static qint32 ByteArrayToI4(QByteArray array);
    static qint64 ByteArrayToI8(QByteArray array);
    static float ByteArrayToF4(QByteArray array);
    static double ByteArrayToF8(QByteArray array);
    static char ByteArrayToChar(QByteArray array);
    static QString ByteArrayToASCII(QByteArray array);
    static bool ByteArrayToBoolean(QByteArray array);

    static std::vector<quint8> ByteArrayToU1List(QByteArray array);
    static std::vector<quint16> ByteArrayToU2List(QByteArray array);
    static std::vector<quint32> ByteArrayToU4List(QByteArray array);
    static std::vector<quint64> ByteArrayToU8List(QByteArray array);
    static std::vector<qint8> ByteArrayToI1List(QByteArray array);
    static std::vector<qint16> ByteArrayToI2List(QByteArray array);
    static std::vector<qint32> ByteArrayToI4List(QByteArray array);
    static std::vector<qint64> ByteArrayToI8List(QByteArray array);
    static std::vector<float> ByteArrayToF4List(QByteArray array);
    static std::vector<double> ByteArrayToF8List(QByteArray array);
    static std::vector<char> ByteArrayToCharList(QByteArray array);
    static std::vector<bool> ByteArrayToBoolList(QByteArray array);

    static QByteArray U1ToByteArray(quint8 value);
    static QByteArray U2ToByteArray(quint16 value);
    static QByteArray U4ToByteArray(quint32 value);
    static QByteArray U8ToByteArray(quint64 value);
    static QByteArray I1ToByteArray(qint8 value);
    static QByteArray I2ToByteArray(qint16 value);
    static QByteArray I4ToByteArray(qint32 value);
    static QByteArray I8ToByteArray(qint64 value);
    static QByteArray F4ToByteArray(float value);
    static QByteArray F8ToByteArray(double value);
    static QByteArray CharToByteArray(char value);
    static QByteArray QStringToByteArray(QString value);
    static QByteArray BoolToByteArray(bool value);

    static QByteArray U1ListToByteArray(std::vector<quint8> list);
    static QByteArray U2ListToByteArray(std::vector<quint16> list);
    static QByteArray U4ListToByteArray(std::vector<quint32> list);
    static QByteArray U8ListToByteArray(std::vector<quint64> list);
    static QByteArray I1ListToByteArray(std::vector<qint8> list);
    static QByteArray I2ListToByteArray(std::vector<qint16> list);
    static QByteArray I4ListToByteArray(std::vector<qint32> list);
    static QByteArray I8ListToByteArray(std::vector<qint64> list);
    static QByteArray F4ListToByteArray(std::vector<float> list);
    static QByteArray F8ListToByteArray(std::vector<double> list);
    static QByteArray CharListToByteArray(std::vector<char> list);
    static QByteArray BoolListToByteArray(std::vector<bool> list);
};

#endif // CONVERSIONUTIL_H
